<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/7/1
 * Time: 17:45
 */

namespace app\api\controller\v1;


class Upvote extends AuthBase
{

    /**
     * 新闻点赞参数
     * @return array
     * @throws \think\exception\DbException
     */
    public function save(){
        $id = input('post.id', 0, 'intval');
        if (empty($id)){
            return show(config('code.error'), 'id不存在', []. 404);
        }
        //判定这个 ID 的新闻文章 -> ent_news
        //...
        $data = [
            'user_id' => $this->user->id,
            'news_id' => $id,
        ];
        //查询库里面是否存在 点赞
        $userNews = model('UserNews')->get($data);
        if ($userNews){
            return show(config('code.error'), '已经点赞过，不能再次点赞', []. 404);
        }

        try{
            $data['create_time'] = time();
            $userNewsId = model('UserNews')->add($data);
            if ($userNewsId){
                model('News')->where(['id' => $id])->setInc('upwote_count');
                return show(config('code.success'), 'OK', [], 202);
            }else{
                return show(config('code.error'), '内部错误，点赞失败', []. 500);
            }
        }catch (\Exception $e) {
            return show(config('code.error'), $e->getMessage(), [] . 500);
        }
    }

    /**
     * 新闻取消点赞
     * @return array
     * @throws \think\exception\DbException
     */
    public function delete(){
        $id = input('post.id', 0, 'intval');
        if (empty($id)){
            return show(config('code.error'), 'id不存在', []. 404);
        }
        //判定这个 ID 的新闻文章 -> ent_news
        //...
        $data = [
            'user_id' => $this->user->id,
            'news_id' => $id,
        ];
        //查询库里面是否存在 点赞
        $userNews = model('UserNews')->get($data);
        if (empty($userNews)){
            return show(config('code.error'), '没有被点赞，无法取消', []. 404);
        }
        try{
            $userNewsId = model('UserNews')->where($data)->delete();
            if ($userNewsId){
                model('News')->where(['id' => $id])->setDec('upwote_count');
                return show(config('code.success'), 'OK', [], 202);
            }else{
                return show(config('code.error'), '取消失败', []. 500);
            }
        }catch (\Exception $e) {
            return show(config('code.error'), $e->getMessage(), [] . 500);
        }
    }

    /**
     * 查看文章是否被用户点赞
     * @return array
     * @throws \think\exception\DbException
     */
    public function read(){
        $id = input('post.id', 0, 'intval');
        if (empty($id)){
            return show(config('code.error'), 'id不存在', []. 404);
        }
        //判定这个 ID 的新闻文章 -> ent_news

        $data = [
            'user_id' => $this->user->id,
            'news_id' => $id,
        ];
        //查询库里面是否存在 点赞
        $userNews = model('UserNews')->get($data);
        if ($userNews){
            return show(config('code.success'), 'OK', ['isUpvote' => 1]. 200);
        }else{
            return show(config('code.error'), 'NO', ['isUpvote' => 0]. 404);
        }
    }

}